var age;
// undefined
console.log('只声明, 不赋值: ' + age);

// 第七行代码报错了, 会中断后面你的代码运行!!!, 像Java的异常机制
// Uncaught ReferenceError: person is not defined   at 01_data_type.js:7
// console.log('不声明, 不赋值, 直接使用: ' + person);

// 不声明, 只赋值: 10
num = 10;
console.log('不声明, 只赋值: ' + num);


// 数据类型分为两种
//      简单数据类型 (Number, String, Boolean, Undefined, Null)
//      复杂数据类型 (object)
//      Java 8大基础数据类型: char 1 | byte 1 | short 2 | int 4 | long 8 | float 4 | double 8 | boolean 1

// 数字型包括整数和浮点数, 默认值是0
// 数字型有三个特殊值
//      Infinity -> 无穷大, 大于任何数
//     -Infinity -> 无穷小, 小于任何数
//         NaN   -> Not a number, 代表一个非数值 -> scala中浮点型也会涉及这个NaN问题
var userAge = 21;
var isOk = isNaN(userAge);
console.log(isOk);              // false, 21 不是一个非数值
var userName = 'Tom';
console.log(isNaN(userName))    // true,  'Tom' 是一个非数值

// + 号总结口诀: 数值相加, 字符相连
// 布尔值和数值型相加的时候, true -> 1, false -> 0      !!!
// 模板字符串 ``
let str = `你是一个2b, 今年你${userAge}岁了`;
console.log(str)


// 一个声明后没有被赋值的变量会有一个默认值 undefined (如果进行相连或相加时, 注意结果)
var variable;
console.log(variable);                  // undefined
console.log('你好! ' + variable);       // 你好! undefined
console.log(11 + variable);             // NaN
console.log(true + variable);           // NaN


// 一个声明变量给null值, 里面存的值为空
var varI = null;
console.log('你好! ' + varI);    // 你好! null
console.log(11 + varI);         // 11
console.log(true + varI);       // 1

// 检测数据类型  --> 关键字 typeof   java中, 判断数据结构类型的是 instanceof
console.log(typeof varI)            // object
console.log(typeof variable)        // undefined


// 使用表单、prompt后去过来的数据默认是 字符串 类型!!!,
//  因此不能直接进行加法运算, 而需要转换其他数据类型


// 数据类型转换
//      转换为字符串
//          toString(), 每个数据类型都有一个toString()方法
//          String()强制转换  --> 类似于Java中的静态工具类的静态方法
//          + 加号拼接

// 注意: null和 undefined 调用 toString(), 将会出现异常!!!
// console.log('variable.toString()' + variable.toString())
// console.log('varI.toString()' + varI.toString())

console.log('typeof userAge: ' + typeof userAge)                // typeof userAge: number
console.log('userAge.toString(): ' + userAge.toString())        // userAge.toString(): 21
console.log('typeof userAge.toString(): ' + typeof userAge.toString())  // typeof userAge.toString(): string

//      转换为数字型
//          parseInt(str) 函数    --> 转换为整数数值型     静态方法
//          parseFloat(str) 函数  --> 转换为浮点数数值型   静态方法
//          Number()强制转换函数   --> 将string类型转换为数值型   静态方法
console.log(parseInt('123'))
console.log(parseFloat('123.12'))

//      转换为布尔型
//          Boolean(var)函数      --> 其他类型转换为布尔类型
//          代表空 (空串)、否定的值会被转换成 false, 如 ''、0、NAN、null、undefined
//          其余值都会被转换为 true
